package util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.swing.JOptionPane;

/**
 * 
 * @author Felipe Jose, Filipe Alencar, Rodrigo de Brito, Thiago Goncalves, Victor Hugo Arcelino;
 *
 */
public class Data {
    private Date data;

    /**
     * Inicializa uma nova Data. Um novo GregorianCalendar eh criado.
     * Inicializa um calendario
     */
    public Data(){
    	data = new Date();
    }

    /**
     * Inicializa uma DAta a partir de uma GregorianCalendar
     * @param gc Um gregorian calendar ja definido
     */
    public Data( Date data ){
        this.data = data;
    }
    
    /**
     * Incializa uma Data a partir de uma data em forma de texto
     * @param data Data em forma de String para ser definido como GregorianCalendar
     */
    @SuppressWarnings("deprecation")
	public Data( String data ){
//        gc = new GregorianCalendar();
    	this.data = new Date();
        SimpleDateFormat dateForma = new SimpleDateFormat("dd/MM/yyyy");
        try{
            Date dt = dateForma.parse(data);
            this.data.setDate((int) dt.getTime());
//            gc.setTime(dt);
        } catch(ParseException ex){
            JOptionPane.showMessageDialog(null, ex);
        }
    }


    /**
     * Retorna a data atual em forma de texto
     * @return Data atual em forma de texto
     */
    public static String dataAgora(){
        return new Data().horaDataFormatada();
    }   

    /**
     *
     * @param qtdeDias Quantidade de dias para aumentar na data
     * @return A data já adicionada dos dias
     */
	public void addDias(int qtdeDias){
    	
    	data.setTime(Calendar.DAY_OF_MONTH + qtdeDias);
    }

    /**
     * Compara a data atual com uma data passada. Caso o data passada seja antes que a data atual,
     * entao sera retornado o valor 0. Caso contrario, sera retornado o numero de dias
     * que a data passada tem mais que a data atual.
     * @param data Data que sera comparada.
     * @return Numero de dias que a data passada eh maior que a data atual.
     */
    public int compararData(Data data){
    	long diferencaDias = (data.getDate().getTime() - this.data.getTime());
        return (int) ( diferencaDias / (1000 * 60 * 60 * 24));
    }
    
    /**
     * Retorna a data completa em forma de String
     * @return Retorna a data em forma de String
     */
    public String imprime(){
    	String ret = this.data + "";
        return ret;
    }

    /**
     * Retorna a data em formato dia, mes e ano.
     * Exemplo: 20/12/2010
     * @return A data formatada
     */
    public String dataFormatada(){
    	long date = this.data.getTime();
        SimpleDateFormat dataFormat = new SimpleDateFormat("dd/MM/yyyy");
        String dtFormatada = dataFormat.format(date);
        return dtFormatada;
    }

    /**
     * Retorna String que representa a data atual no forma data e hora.
     * Exemplo: 20/12/2010 10:12:30
     * @return String que representa a data na forma de Data e Hora
     */
    public String dataHoraFormatada(){
        SimpleDateFormat dataFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
        String dtFormatada = dataFormat.format(this.data);
        return dtFormatada;
    }

    /**
     * Retorna String que representa a data atual no forma hora e data.
     * Exemplo: 10:12:30 20/12/2010
     * @return String que representa a data na forma de Hora e Data
     */
    public String horaDataFormatada(){
        SimpleDateFormat dataFormat = new SimpleDateFormat("HH:mm:ss dd/MM/yyyy");
        String dtFormatada = dataFormat.format(this.data);
        return dtFormatada;
    }

    /**
     * Retorna a data atual na forma de Date
     * @return Data na forma de Date
     */
    public Date getDate(){
    	return data;
    }
}

